<?php
namespace app\api\controller;
use WeChatPay\Builder;
use WeChatPay\Crypto\Rsa;
use WeChatPay\Util\PemUtil;
use app\common\controller\Api;

class Wxpay extends Api
{

    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ["*"];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ["*"];


    public function test(){
        $merchantId = '1710092419';
        // 从本地文件中加载「商户API私钥」，「商户API私钥」会用来生成请求的签名
        $merchantPrivateKeyFilePath = 'file:///www/wwwroot/hainan.megmt.com/public/apiclient_key.pem';
        $merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
        // 「商户API证书」的「证书序列号」
        $merchantCertificateSerial = '1F49455BB07F3F1818168E1E21389FA89554968F';
        // 从本地文件中加载「微信支付平台证书」(可使用证书下载工具得到），用来验证微信支付应答的签名
        $platformCertificateFilePath = 'file:///www/wwwroot/hainan.megmt.com/public/wechatpay_77A215B745C4B7817B7DC820BD8AFC579779FB5C.pem';
        $platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);
        // 从「微信支付平台证书」中获取「证书序列号」
        $platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath);
        // 构造一个 APIv3 客户端实例
        $instance = Builder::factory([
            'mchid'      => $merchantId,
            'serial'     => $merchantCertificateSerial,
            'privateKey' => $merchantPrivateKeyInstance,
            'certs'      => [
                $platformCertificateSerial => $platformPublicKeyInstance,
            ],
        ]);
        // 以 Native 支付为例，发送请求
        $resp = $instance
            ->chain('v3/pay/transactions/native')
            ->post(['json' => [
                'mchid'        => $merchantId,
                'out_trade_no' => 'p123456789123',
                'appid'        => 'wxf648206ca41b10bc',
                'description'  => '测试商品',
                'notify_url'   => 'http://school.xukebao.cn/index.php/api/demo/wxcallback',
                'amount'       => [
                    'total'    => 1,
                    'currency' => 'CNY'
                ],
            ]]);
        var_dump($resp->getBody());
        exit;
        echo $resp->getBody(), PHP_EOL;
    }
}
